<?php

// Названия предметов
defined('COURSE_MATH') or define('COURSE_MATH', 'Математика');
defined('COURSE_PHYS') or define('COURSE_PHYS', 'Физика');
defined('COURSE_CHEM_PM') or define('COURSE_CHEM_PM', 'Химия ФМ');
defined('COURSE_CHEM_CB') or define('COURSE_CHEM_CB', 'Химия ХБ');
defined('COURSE_CHEM_CB_1') or define('COURSE_CHEM_CB_1', 'Химия ХБ1');
defined('COURSE_CHEM_CB_2') or define('COURSE_CHEM_CB_2', 'Химия ХБ2');
defined('COURSE_BIOL') or define('COURSE_BIOL', 'Биология');
defined('COURSE_INFO') or define('COURSE_INFO', 'Информатика');
defined('COURSE_GEOG') or define('COURSE_GEOG', 'География-Землеведение');
defined('COURSE_RUSS') or define('COURSE_RUSS', 'Русский язык');
defined('COURSE_LITE') or define('COURSE_LITE', 'Литература');
defined('COURSE_ENGL') or define('COURSE_ENGL', 'Ин. язык');
defined('COURSE_HIST') or define('COURSE_HIST', 'История');
defined('COURSE_SOCI') or define('COURSE_SOCI', 'Обществознание');
defined('COURSE_CULT') or define('COURSE_CULT', 'Физкультура');

/**
 * Справочный класс: работает с постоянными названиями, инициалами и кодами курсов
 * Курсы для разных классов могут быть различны
 */
class class_courses {
	
	/**
	 * Школьный класс
	 * @var school_class
	 */
	private $school_class = NULL;
	
	/**
	 * Инициалы курсов
	 * @var array
	 */
	private $courses_initials = NULL;
	
	/**
	 * Коды курсов
	 * @var array
	 */
	private $courses_codes = NULL;
	
	function __construct($school_class) {
		$this->set_school_class($school_class);
		$this->init_courses_initials();
		$this->init_courses_codes();
	}
	
	function __destruct() {
		
	}
	
	function set_school_class($school_class) {
		$this->school_class = $school_class;
	}
	
	/**
	 * Инициализация инициалов курсов
	 */
	private function init_courses_initials() {
		// предмет => соответствующий инициал
		$this->courses_initials = array(
			COURSE_MATH => 'М',
			COURSE_PHYS => 'Ф',
			COURSE_CHEM_PM => 'Х',
			COURSE_CHEM_CB_1 => 'Х', // порядок химий важен, иначе будет неправильно происходить замена на инициалы
			COURSE_CHEM_CB_2 => 'Х',
			COURSE_CHEM_CB => 'Х',
			COURSE_BIOL => 'Б',
			COURSE_INFO => 'Иф',
			COURSE_ENGL => 'ИЯ',
			COURSE_GEOG => 'Г/З',
			COURSE_HIST => 'Ис',
			COURSE_RUSS => 'Р',
			COURSE_LITE => 'Л',
			COURSE_SOCI => 'О',
			COURSE_CULT => 'Ф-ра'
		);
	}
	
	/**
	 * Инициализация символьных кодов курсов
	 */
	private function init_courses_codes() {
		$this->courses_codes = array (
			'math' => COURSE_MATH,
			'phys' => COURSE_PHYS,
			'chem' => $this->init_course_chem(),
			'biol' => COURSE_BIOL,
			'info' => COURSE_INFO,
			'geog' => COURSE_GEOG,
			'russ' => COURSE_RUSS,
			'lite' => COURSE_LITE,
			'engl' => COURSE_ENGL,
			'hist' => COURSE_HIST,
			'soci' => COURSE_SOCI,
			'cult' => COURSE_CULT
		);
	}
	
	/**
	 * Инициализация названия предмета для химии
	 * в зависимости от специализации и потока
	 */
	private function init_course_chem() {
		if ($this->school_class->get_specialization() == 'pm') {
			return COURSE_CHEM_PM;
		} else {
			if ($this->school_class->get_stream() == 'a') { 
				return COURSE_CHEM_CB;
			} else if ($this->school_class->get_stream() == 'b') {
				return COURSE_CHEM_CB_2; 
			} else {
				return COURSE_CHEM_CB_1;
			}
		}
	}
	
	function get_courses_codes() {
		return $this->courses_codes;
	}
	
	/**
	 * Возвращает инициалы предметов
	 */
	function get_initials($courses) {
		// массив соответствий что искать => на что заменить
		$conformity = $this->courses_initials;
		// создание массивов для функции str_replace
		$search = array();
		$replace = array();
		foreach($conformity as $key => $value) {
			$search[] = $key;
			$replace[] = $value;
		}
		return str_replace($search, $replace, $courses);
	}
}

?>
